home *** CD-ROM | disk | FTP | other *** search
- ; 1). Set your editor's TAB width to 3 in order to correctly view this file.
- ; 2). Delete the following 2 directives if not using MANX. If using LATTICE,
- ; make sure that you assemble this module with large CODE and DATA
- ; model.
-
- far code ;for Manx only, it means large code, large data (int = 32 bits)
- far data ;this module must be assembled expecting passed ints as 32 bits
-
- ; 3). Copy the file "IFF.i" to the current directory.
- ; 4). Assemble this module and link it with your C application modules.
- ;
- ;As an additional savings in size, you may wish to clip out the interface code
- ;for any routines that you do not wish to use. For example, if you don't plan
- ;on using "GetIFFPMsg", delete the 7 lines starting at XDEF _GetIFFPMsg.
-
- SECTION ilbmcode,CODE
-
- INCLUDE "IFF.i" ;supplies the LVO offsets
-
- XREF _ILBMBase ;ilbm.library opened from C code, and base stored there
-
- XDEF _GetIFFPMsg
- XDEF __GetIFFPMsg
- _GetIFFPMsg:
- movea.l _ILBMBase,a6
- __GetIFFPMsg:
- move.l 4(sp),d0
- jmp _LVOGetIFFPMsg(a6)
-
- XDEF _BlankPointer
- XDEF __BlankPointer
- _BlankPointer:
- movea.l _ILBMBase,a6
- __BlankPointer:
- movea.l 4(sp),a0
- jmp _LVOBlankPointer(a6)
-
-
- ;######################## IFF READER ROUTINES ##########################
-
- ;***********************************************************************
- ;BOOL = LoadIFFToWindow(fileName, ILBMFrame)
- ; d0 d1 a1
-
- XDEF _LoadIFFToWindow,__LoadIFFToWindow
- _LoadIFFToWindow:
- movea.l _ILBMBase,a6
- __LoadIFFToWindow:
- move.l 4(sp),d1
- movea.l 8(sp),a1
- jmp _LVOLoadIFFToWindow(a6)
-
-
- ;**************************** LoadIFF() *********************************
- ; IFFP = LoadIFF(fileHandle, Vectors, masterFrame)
- ; d0 d1 a0 a1
-
- XDEF _LoadIFF,__LoadIFF
- _LoadIFF:
- movea.l _ILBMBase,a6
- __LoadIFF:
- movem.l 4(sp),d1/a0/a1
- bsr.s SetVectors
- jmp _LVOLoadIFF(a6)
-
-
- ;**************************** ScaleImage() *********************************
- ;BOOL ScaleImage(dest_rectangle,source_rectangle,dest_rport,source_bitmap)
- ; a0 a1 a2 a4
-
-
- XDEF _ScaleImage,__ScaleImage
- _ScaleImage:
- movea.l _ILBMBase,a6
- __ScaleImage:
- movem.l a2/a4,-(sp)
- movem.l 12(sp),a0/a1/a2/a4
- jsr _LVOScaleImage(a6)
- movem.l (sp)+,a2/a4
- rts
-
- ;**************************** SetupBitmap() *********************************
- ; SetupBitmap(raster, Bitmap, BMHD)
- ; d0 a0 a1
-
-
- XDEF _SetupBitmap,__SetupBitmap
- _SetupBitmap:
- movea.l _ILBMBase,a6
- __SetupBitmap:
- movem.l 4(sp),d0/a0/a1
- jmp _LVOSetupBitmap(a6)
-
-
- ;**************************** DecompBODY() *********************************
- ; DecompBODY(BODY, BMHD, Bitmap)
- ; a0 a1 a2
- ; Decompresses the BODY chunk into the passed BitMap's planes based on the
- ; passed BMHD's w, h, numPlanes, and pageWidth. This is used for the first
- ; frame of the ANIM (ANHD's opmode = 0). BODY is the address of the loaded
- ; BODY chunk of the first frame of the ANIM file (minus the 8 byte header).
-
-
- XDEF _DecompBODY,__DecompBODY
- _DecompBODY:
- movea.l _ILBMBase,a6
- __DecompBODY:
- move.l a2,-(sp)
- movem.l 8(sp),a0/a1/a2
- jsr _LVODecompBODY(a6)
- movea.l (sp)+,a2
- rts
-
- ;**************************** LoadILBM() *********************************
- ; IFFP = LoadILBM(fileHandle, Vectors, ILBMFrame)
- ; d0 d1 a0 a1
-
-
- XDEF _LoadILBM,__LoadILBM
- _LoadILBM:
- movea.l _ILBMBase,a6
- __LoadILBM:
- movem.l 4(sp),d1/a0/a1
- bsr.s SetVectors
- jmp _LVOLoadILBM(a6)
-
-
- SetVectors:
- movem.l a0/a2/a3,-(sp)
- ;---Setup CInterface to PROP handler
- lea PROPVector,a3
- move.l (a0)+,(a3)+
- beq.s noPROP
- lea PropHandler,a2
- move.l a2,-4(a0)
- noPROP:
- ;---Setup CInterface to FORM handler
- move.l (a0)+,(a3)+
- beq.s noFORM
- lea FormHandler,a2
- move.l a2,-4(a0)
- noFORM:
- ;---Setup CInterface to Chunk handler
- move.l (a0)+,(a3)+
- beq.s noChunk
- lea ChunkHandler,a2
- move.l a2,-4(a0)
- noChunk:
- ;---Setup CInterface to Non-ILBM FORM handler
- move.l (a0),(a3)
- beq.s noNon
- lea NONILBM,a2
- move.l a2,(a0)
- noNon:
- movem.l (sp)+,a0/a2/a3
- rts
-
- ; Calls C PROP routine as follows:
- ; IFFP = PropRoutine(chunkID,PropID,Context,Vectors,Frame,PROPList)
- PropHandler:
- movem.l d0/d2/a0/a2/a3/a4,-(sp)
- movea.l PROPVector,a1
- jsr (a1)
- movem.l (sp)+,d1/d2/a0/a2/a3/a4
- rts
-
- ; Calls C FORM routine as follows:
- ; IFFP = FormRoutine(chunkID,Context,Vectors,Frame,PROPList)
- FormHandler:
- movea.l FORMVector,a1
- do_hand:
- movem.l d0/a0/a2/a3/a4,-(sp)
- jsr (a1)
- movem.l (sp)+,d1/a0/a2/a3/a4
- rts
-
- ; An Unknown chunk in an ILBM (i.e. DLTA, ANHD, DEST, GRAB...)
- ChunkHandler:
- movea.l ChunkVector,a1
- bra.s do_hand
-
- ; A Non-ILBM FORM
- NONILBM:
- movea.l NonILBMVector,a1
- bra.s do_hand
-
- ;*************************** GetPROPStruct() *****************************
- ; PropStruct = GetPROPStruct(size, PropID, PROPList)
- ; d0 d0 d1 a1
-
-
- XDEF _GetPROPStruct,__GetPROPStruct
- _GetPROPStruct:
- movea.l _ILBMBase,a6
- __GetPROPStruct:
- movem.l 4(sp),d0/d1/a1
- jmp _LVOGetPROPStruct(a6)
-
-
- ;*************************** SearchPROP() *****************************
- ; PropStruct = SearchPROP(PropID, PROPList)
- ; d0 d0 a1
-
-
- XDEF _SearchPROP,__SearchPROP
- _SearchPROP:
- movea.l _ILBMBase,a6
- __SearchPROP:
- movem.l 4(sp),d0/a1
- jmp _LVOSearchPROP(a6)
-
-
- ;*************************** CopyILBMProp() *****************************
- ; CopyILBMProp(FromFrame, ToFrame)
- ; d0 a1
-
-
- XDEF _CopyILBMProp,__CopyILBMProp
- _CopyILBMProp:
- movea.l _ILBMBase,a6
- __CopyILBMProp:
- movem.l 4(sp),d0/a1
- jmp _LVOCopyILBMProp(a6)
-
- ;*************************** FreePROPStruct() *****************************
- ; FreePROPStruct(PROPList)
- ; a1
-
-
- XDEF _FreePROPStruct,__FreePROPStruct
- _FreePROPStruct:
- movea.l _ILBMBase,a6
- __FreePROPStruct:
- movea.l 4(sp),a1
- jmp _LVOFreePROPStruct(a6)
-
-
- ;*************************** HandleCAMG() *******************************
- ; HandleCAMG(Context,ILBMFrame)
- ; a0 a1
-
-
- XDEF _HandleCAMG,__HandleCAMG
- _HandleCAMG:
- movea.l _ILBMBase,a6
- __HandleCAMG:
- movem.l 4(sp),a0/a1
- jmp _LVOHandleCAMG(a6)
-
-
- ;*************************** HandleCRNG() *******************************
- ; HandleCRNG(Context,ILBMFrame)
- ; a0 a1
-
- XDEF _HandleCRNG,__HandleCRNG
- _HandleCRNG:
- movea.l _ILBMBase,a6
- __HandleCRNG:
- movem.l 4(sp),a0/a1
- jmp _LVOHandleCRNG(a6)
-
-
- ;*************************** HandleCCRT() *******************************
- ; HandleCCRT(Context,ILBMFrame)
- ; a0 a1
-
- XDEF _HandleCCRT,__HandleCCRT
- _HandleCCRT:
- movea.l _ILBMBase,a6
- __HandleCCRT:
- movem.l 4(sp),a0/a1
- jmp _LVOHandleCCRT(a6)
-
-
- ;**************************** OpenRIFF() *******************************
- ; IFFP = OpenRIFF(fileHandle, newContext, Frame)
- ; d0 d1 a0 a1
-
- XDEF _OpenRIFF,__OpenRIFF
- _OpenRIFF:
- movea.l _ILBMBase,a6
- __OpenRIFF:
- movem.l 4(sp),d1/a0/a1
- jmp _LVOOpenRIFF(a6)
-
-
- ;**************************** FileLength() *****************************
- ;FileSize = FileLength(fileHandle)
- ; d0 d1
-
- XDEF _FileLength,__FileLength
- _FileLength:
- movea.l _ILBMBase,a6
- __FileLength:
- move.l 4(sp),d1
- move.l a6,-(sp)
- jsr _LVOFileLength(a6)
- movea.l (sp)+,a6
- rts
-
-
- ;********************** OpenRGroup() *****************************
- ; IFFP = OpenRGroup(parent, new) passed 2 Context structures
- ; d0 a0 a1
-
-
- XDEF _OpenRGroup,__OpenRGroup
- _OpenRGroup:
- movea.l _ILBMBase,a6
- __OpenRGroup:
- movea.l 4(sp),a0
- movea.l 8(sp),a1
- jmp _LVOOpenRGroup(a6)
-
-
- ;***************************** CloseRGroup ******************************
- ; IFFP = CloseRGroup(context)
- ; d0 a0
-
- XDEF _CloseRGroup,__CloseRGroup
- _CloseRGroup:
- movea.l _ILBMBase,a6
- __CloseRGroup:
- movea.l 4(sp),a0
- jmp _LVOCloseRGroup(a6)
-
-
- ;*************************** SkipFwd() **********************************
- ; IFFP = SkipFwd(context, bytes)
- ; d0 a0 d1
-
-
- XDEF _SkipFwd,__SkipFwd
- _SkipFwd:
- movea.l _ILBMBase,a6
- __SkipFwd:
- movea.l 4(sp),a0
- move.l 8(sp),d1
- jmp _LVOSkipFwd(a6)
-
-
- ;*************************** GetChunkHdr *******************************
- ; ID = GetChunkHdr(context)
- ; d0 a0
-
-
- XDEF _GetChunkHdr,__GetChunkHdr
- _GetChunkHdr:
- movea.l _ILBMBase,a6
- __GetChunkHdr:
- movea.l 4(sp),a0
- jmp _LVOGetChunkHdr(a6)
-
-
- ;************************** IFFReadBytes ********************************
- ; IFFP = IFFReadBytes(nBytes, context, buffer)
- ; d0 d0 a0 a1
-
-
- XDEF _IFFReadBytes,__IFFReadBytes
- _IFFReadBytes:
- movea.l _ILBMBase,a6
- __IFFReadBytes:
- movem.l 4(sp),d0/a0/a1
- jmp _LVOIFFReadBytes(a6)
-
-
- ;************************* GetFChunkHdr() ******************************
- ; ID = GetFChunkHdr(context)
- ; d0 a0
-
- XDEF _GetFChunkHdr,__GetFChunkHdr
- _GetFChunkHdr:
- movea.l _ILBMBase,a6
- __GetFChunkHdr:
- movea.l 4(sp),a0
- jmp _LVOGetFChunkHdr(a6)
-
-
- ;************************* GetF1ChunkHdr() ******************************
- ; ID = GetF1ChunkHdr(context)
- ; d0 a0
-
-
- XDEF _GetF1ChunkHdr,__GetF1ChunkHdr
- _GetF1ChunkHdr:
- movea.l _ILBMBase,a6
- __GetF1ChunkHdr:
- movea.l 4(sp),a0
- jmp _LVOGetF1ChunkHdr(a6)
-
-
- ;**************************** GetPChunkHdr ****************************
- ; ID = GetPChunkHdr(context)
- ; d0 a0
-
-
- XDEF _GetPChunkHdr,__GetPChunkHdr
- _GetPChunkHdr:
- movea.l _ILBMBase,a6
- __GetPChunkHdr:
- movea.l 4(sp),a0
- jmp _LVOGetPChunkHdr(a6)
-
-
- ;**************************** GetCMAP() *******************************
- ; IFFP = GetCMAP(Context, colorMap, pNColorRegs)
- ; d0 d0 a0 a1
-
- XDEF _GetCMAP,__GetCMAP
- _GetCMAP:
- movea.l _ILBMBase,a6
- __GetCMAP:
- movem.l 4(sp),d0/a0/a1
- jmp _LVOGetCMAP(a6)
-
-
- ;****************************** GetBODY() *******************************
- ; IFFP = GetBODY(bitmap, mask, context, BMHD)
- ; d0 d0 d1 a0 a1
-
- XDEF _GetBODY,__GetBODY
- _GetBODY:
- movea.l _ILBMBase,a6
- __GetBODY:
- movem.l 4(sp),d0/d1/a0/a1
- jmp _LVOGetBODY(a6)
-
- ;*********************************************************************
- ;BOOL = UnPackRow(dstBytes0, srcBytes0, Source, Dest)
- ; d0 d1 d3 a2 a3
-
- XDEF _UnPackRow,__UnPackRow
- _UnPackRow:
- movea.l _ILBMBase,a6
- __UnPackRow:
- movem.l d3/a2/a3,-(sp)
- movem.l 16(sp),d1/d3/a2/a3
- jsr _LVOUnPackRow(a6)
- movem.l (sp)+,d3/a2/a3
- rts
-
- ;****************************** DecompDLTA() *******************************
- ; DecompDLTA(DLTA,bitmap)
- ; a0 a2
-
- XDEF _DecompDLTA,__DecompDLTA
- _DecompDLTA:
- movea.l _ILBMBase,a6
- __DecompDLTA:
- move.l a2,-(sp)
- movem.l 8(sp),a0/a2
- jsr _LVODecompDLTA(a6)
- movea.l (sp)+,a2
- rts
-
- ;****************************** DecodeVKPlane() *******************************
- ; DecodeVKPlane(linebytes, ytable, in, out)
- ; d0 d1 a0 a1
-
- XDEF _DecodeVKPlane,__DecodeVKPlane
- _DecodeVKPlane:
- movea.l _ILBMBase,a6
- __DecodeVKPlane:
- movem.l 4(sp),d0/d1/a0/a1
- jmp _LVODecodeVKPlane(a6)
-
- ;****************************** MakeYTable() *******************************
- ; MakeYTable(width, height, table)
- ; d0 d1 a0
-
- XDEF _MakeYTable,__MakeYTable
- _MakeYTable:
- movea.l _ILBMBase,a6
- __MakeYTable:
- movem.l 4(sp),d0/d1/a0
- jmp _LVOMakeYTable(a6)
-
-
- ;######################## IFF WRITER ROUTINES #########################
-
- ;*************************************************************************
- ; IFFP = SaveWindowToIFF(fileName, window)
- ; d0 d1 a0
-
- XDEF _SaveWindowToIFF,__SaveWindowToIFF
- _SaveWindowToIFF:
- movea.l _ILBMBase,a6
- __SaveWindowToIFF:
- movem.l 4(sp),d1/a0
- jmp _LVOSaveWindowToIFF(a6)
-
- ;******************************* SaveILBM() ******************************
- ;IFFP = SaveILBM(ViewModes,Compress,fhandle,Mask,CTable,BitMap,xyPnt,Handler)
- ; d0 d0 d1 d2 d3 a0 a1 a2 a3
-
- XDEF _SaveILBM,__SaveILBM
- _SaveILBM:
- movea.l _ILBMBase,a6
- __SaveILBM:
- movem.l d2/d3/a2/a3,-(sp)
- movem.l 20(sp),d0/d1/d2/d3/a2/a3
- move.l a3,C_Vector1
- beq.s noCHand
- lea C_Handler1,a3
- noCHand:
- jsr _LVOSaveILBM(a6)
- movem.l (sp)+,d2/d3/a2/a3
- rts
-
- C_Handler1:
- move.l a0,-(sp) ;pass Context to C routine
- movea.l C_Vector1,a1
- jsr (a1)
- movea.l (sp)+,a0
- rts
-
-
- ;******************************* SaveANIM() ******************************
- ;IFFP = SaveANIM(Modes,Compress,fhandle,Mask,CTable,BitMap,xyPnt,Handler,ANHD)
- ; d0 d0 d1 d2 d3 a0 a1 a2 a3 a4
-
- XDEF _SaveANIM,__SaveANIM
- _SaveANIM:
- movea.l _ILBMBase,a6
- __SaveANIM:
- movem.l d2/d3/a2/a3/a4,-(sp)
- movem.l 24(sp),d0/d1/d2/d3/a2/a3/a4
- move.l a3,C_Vector2
- beq.s noCHand2
- lea C_Handler2,a3
- noCHand2:
- jsr _LVOSaveANIM(a6)
- movem.l (sp)+,d2/d3/a2/a3/a4
- rts
-
- C_Handler2:
- movem.l a0/a1,-(sp) ;pass Context and Parent to C routine
- movea.l C_Vector2,a1
- jsr (a1)
- movem.l (sp)+,a0/a1
- rts
-
-
- ;**************************** OpenWIFF() *****************************
- ;IFFP = OpenWIFF(limit, fileHandle, newContext)
- ; d0 d0 d1 a0
-
- XDEF _OpenWIFF,__OpenWIFF
- _OpenWIFF:
- movea.l _ILBMBase,a6
- __OpenWIFF:
- movem.l 4(sp),d0/d1/a0
- jmp _LVOOpenWIFF(a6)
-
-
- ;*************************** StartWGroup() ********************************
- ;IFFP = StartWGroup(groupType, groupSize, subtype, parent, new)
- ; d0 d0 d1 d2 a0 a1
-
- XDEF _StartWGroup,__StartWGroup
- _StartWGroup:
- movea.l _ILBMBase,a6
- __StartWGroup:
- move.l d2,-(sp)
- movem.l 8(sp),d0/d1/d2/a0/a1
- jsr _LVOStartWGroup(a6)
- move.l (sp)+,d2
- rts
-
-
- ;*************************** OpenWGroup() *******************************
- ;IFFP = OpenWGroup(parent, new)
- ; d0 a0 a1
-
- XDEF _OpenWGroup,__OpenWGroup
- _OpenWGroup:
- movea.l _ILBMBase,a6
- __OpenWGroup:
- movea.l 4(sp),a0
- movea.l 8(sp),a1
- jmp _LVOOpenWGroup(a6)
-
-
- ;***************************** EndWGroup() ********************************
- ;IFFP = EndWGroup(old)
- ; d0 a0
-
- XDEF _EndWGroup,__EndWGroup
- _EndWGroup:
- movea.l _ILBMBase,a6
- __EndWGroup:
- movea.l 4(sp),a0
- jmp _LVOEndWGroup(a6)
-
-
- ;************************ CloseWGroup *********************************
- ;IFFP = CloseWGroup(old)
- ; d0 a0
-
- XDEF _CloseWGroup,__CloseWGroup
- _CloseWGroup:
- movea.l _ILBMBase,a6
- __CloseWGroup:
- movea.l 4(sp),a0
- jmp _LVOCloseWGroup(a6)
-
-
- ;******************************* PutCk **********************************
- ;IFFP = PutCk(ckID, ckSize, context, data)
- ; d0 d0 d1 a0 a1
-
- XDEF _PutCk,__PutCk
- _PutCk:
- movea.l _ILBMBase,a6
- __PutCk:
- movem.l 4(sp),d0/d1/a0/a1
- jmp _LVOPutCk(a6)
-
-
- ;******************************* PutCkHdr() ****************************
- ;IFFPreturn = PutCkHdr(chunkID, chunkSize, context)
- ; d0 d1 a0
-
- XDEF _PutCkHdr,__PutCkHdr
- _PutCkHdr:
- movea.l _ILBMBase,a6
- __PutCkHdr:
- movem.l 4(sp),d0/d1/a0
- jmp _LVOPutCkHdr(a6)
-
-
- ;*************************** IFFWriteBytes() ***************************
- ;IFFP IFFWriteBytes(nBytes, context, data)
- ; d0 a0 a1
-
- XDEF _IFFWriteBytes,__IFFWriteBytes
- _IFFWriteBytes:
- movea.l _ILBMBase,a6
- __IFFWriteBytes:
- movem.l 4(sp),d0/a0/a1
- jmp _LVOIFFWriteBytes(a6)
-
-
- ;****************************** PutCkEnd() ******************************
- ;IFFP = PutCkEnd(context)
- ; d0 a0
-
- XDEF _PutCkEnd,__PutCkEnd
- _PutCkEnd:
- movea.l _ILBMBase,a6
- __PutCkEnd:
- move.l 4(sp),a0
- jmp _LVOPutCkEnd(a6)
-
-
- ;*************************** InitBMHdr() ********************************
- ;IFFP InitBMHdr(masking, compression, transparentColor,
- ; d0 d1 d2
- ; pageWidth, pageHeight, BMHD, bitmap)
- ; d3 d4 a0 a1
-
- XDEF _InitBMHdr,__InitBMHdr
- _InitBMHdr:
- movea.l _ILBMBase,a6
- __InitBMHdr:
- movem.l d2/d3/d4,-(sp)
- movem.l 16(sp),d0/d1/d2/d3/d4/a0/a1
- jsr _LVOInitBMHdr(a6)
- movem.l (sp)+,d2/d3/d4
- rts
-
- ;**************************** PutCMAP() *********************************
- ;IFFP PutCMAP(depth, context, colorTable)
- ; d0 a0 a1
-
- XDEF _PutCMAP,__PutCMAP
- _PutCMAP:
- movea.l _ILBMBase,a6
- __PutCMAP:
- movem.l 4(sp),d0/a0/a1
- jmp _LVOPutCMAP(a6)
-
-
- ;******************************** PutBODY() ******************************
- ;IFFP = PutBODY(mask, context, bmHdr, bitmap)
- ; d0 d0 d1 a0 a1
-
- XDEF _PutBODY,__PutBODY
- _PutBODY:
- movea.l _ILBMBase,a6
- __PutBODY:
- movem.l 4(sp),d0/d1/a0/a1
- jmp _LVOPutBODY(a6)
-
- ;============================ PackRow ===========================
- ;bytes = PackRow(rowSize, pSource, pDest)
- ; d0 d0 a0 a1
-
- XDEF _PackRow,__PackRow
- _PackRow:
- movea.l _ILBMBase,a6
- __PackRow:
- movem.l 4(sp),d0/a0/a1
- jsr _LVOPackRow(a6)
- move.l a6,d1
- lea _sourceptr,a6
- move.l a0,(a6)+
- move.l a1,(a6)
- movea.l d1,a6
- rts
-
- SECTION ilbmdata,DATA
-
- C_Vector2 dc.l 0
-
- C_Vector1 dc.l 0
-
- XDEF _sourceptr,_destptr
- _sourceptr: dc.l 0
- _destptr dc.l 0
-
- PROPVector dc.l 0
- FORMVector dc.l 0
- ChunkVector dc.l 0
- NonILBMVector dc.l 0
-
- END
-